package LimitedTimeGame.Day_0216;

/**
 * @author zxc
 * @date 2023/02/16 08:44
 **/

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;

/**
 * 题目 ：数组能够形成的数对数量
 * 题目详述 ：
 * 给你一个下标从 0 开始的整数数组 nums 。在一步操作中，你可以执行以下步骤：
 * 从 nums 选出 两个 相等的 整数
 * 从 nums 中移除这两个整数，形成一个 数对
 * 请你在 nums 上多次执行此操作直到无法继续执行。
 * 返回一个下标从 0 开始、长度为 2 的整数数组 answer 作为答案，
 * 其中 answer[0] 是形成的数对数目，answer[1] 是对 nums 尽可能执行上述操作后剩下的整数数目。
 *
 * 提示：
 * 1 <= nums.length <= 100
 * 0 <= nums[i] <= 100
 *
 */
public class NumberOfPairs02 {
    /**
     * 思路 ：
     * 对于数组nums进行排序，然后获取其中可能的结果;
     * @param nums
     * @return
     */
    public int[] numberOfPairs(int[] nums) {
        Arrays.sort(nums);
        int[] result = new int[2];
        int len = nums.length;
        int k = 0;
        // 循环遍历所有可能情况 ：
        while(k < len - 1){
            if(nums[k] == nums[k + 1]){
                result[0]++;
                k += 2;
            }
            else {
                result[1]++;
                k++;
            }
        }
        // 考虑特殊情况 ：即，数组中有且仅有一个元素时/ 变量k指向数组nums最后一个元素，即代表了其为单独元素，不能够形成数对;
        if(k == 0 || k >= len){
            result[1]++;
        }
        return result;
    }
}
